package com.example.javabasic.thread.classtwo.activeobject.demo1;

/**
 * future 设计模式, 用于先给一个返回值
 */
public class FutureResult implements Result {
    /**
     * 结果
     */
    private Result result;
    /**
     * 是否准备好了
     */
    private boolean ready  = false;

    /**
     * 将执行结果引用放入FutureResult中,
     * @param result
     */
    public synchronized void setResult(Result result){
        this.result = result;
        this.ready =true;
        this.notifyAll();
    }

    /**
     * 获取结果,  当结果准备好之后  获取结果并返回
     * @return
     */
    @Override
    public synchronized Object getResultValue() {
        while(!ready){
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return this.result.getResultValue();
    }
}
